from flask import Flask
from flask_cors import CORS  # 导入 CORS
from app.extensions import db, migrate
from app.config import Config
from app.routes.category import init_default_categories  # 导入初始化函数

# app/__init__.py（补充蓝图注册）
def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    # 初始化扩展
    db.init_app(app)
    migrate.init_app(app, db)

    # 🌟 关键：在这里添加 CORS 修复 🌟
    CORS(app, resources={r"/api/*": {"origins": "http://localhost:5173"}}) 


    # 注册所有蓝图（新增 statistics_bp 和 tool_bp）
    from app.routes.auth import auth_bp
    from app.routes.category import category_bp
    from app.routes.transaction import transaction_bp
    from app.routes.statistics_routes import statistics_bp  # 导入新蓝图
    from app.routes.tool_routes import tool_bp  # 导入新蓝图
    from app.routes.budgets import budget_bp  # 注册预算蓝图
    from app.routes.post import post_bp  # 注册动态路由

    app.register_blueprint(auth_bp, url_prefix='/api/auth')
    app.register_blueprint(category_bp, url_prefix='/api/category')
    app.register_blueprint(transaction_bp, url_prefix='/api/transaction')
    app.register_blueprint(statistics_bp, url_prefix='/api/statistics')  # 注册统计蓝图
    app.register_blueprint(tool_bp, url_prefix='/api/tool')  # 注册工具蓝图
    # 动态帖子路由使用绝对路径 '/api/dynamics'，不添加前缀避免重复
    app.register_blueprint(post_bp)
    # 预算路由已在文件中使用绝对路径 '/api/budgets/...'
    # 因此此处不添加前缀，避免路径重复
    app.register_blueprint(budget_bp)
    
    # 启动时初始化系统预设分类
    with app.app_context():
        db.create_all()
        init_default_categories()

    return app